#ifndef DYN_MULTIFUNCTOR_MULTIMAPS_HENONMAP_H
#define DYN_MULTIFUNCTOR_MULTIMAPS_HENONMAP_H

#include <armadillo>

#include "dyn_multifunctor_multiMaps.h"

/*! \brief Two dimensional Hénon map class.
 *
 * We reimplement the iterate() and jacobian()
 * functions.
 */

class HenonMap : public MultiMaps
{
public:
    /*! The constructor sets the parameters of the map.*/
    HenonMap(const double a,
             const double b,
             const int p);

    /*! @name Hénon Map Operations */
    //@{
    colvec operator()(const colvec X){return iterate(X,1);}
    colvec iterate(const colvec X, int p);
    mat jacobian(const colvec X, int p);
    //@}

    /*! @name Accessor Functions. */
    //@{
    double getA(){return a;}
    double getB(){return b;}

    void setA(double para){a = para;}
    void setB(double para){b = para;}
    //@}

protected:
    /*! @name Parameters of the map. */
    double a,b;

};

#endif // DYN_MULTIFUNCTOR_MULTIMAPS_HENONMAP_H
